//js文件格式是GBK,在调用时手机上汉字会出现乱码，请大家在使用时复制粘贴一份，另存为UTF-8的文件格式，注意其中汉字显示是否正常，注释信息无所谓
//util.js原来是GRK格式（通知栏中会显示乱码），需重新复制一份，uniapp中js文件默认是UFT-8格式：将复制后的js文件中的中文乱码修改即可使用
//在通知栏显示下载进度条
export default function NotificationUtil() {
	var defaultTitle = '通知栏标题';
	var defaultContent = '通知内容';
	var defaultTicker = '通知提示';
	var defaultNotifyId = 1000;
	var defaultNumber = 1;
	/**
	 * @description 比较两个版本大小
	 * 比较版本大小，如果新版本nowVersion大于旧版本OldResourceVersion则返回true，否则返回false
	 */
	function compareVersion(OldVersion, nowVersion) {
		if (!OldVersion || !nowVersion || OldVersion == '' || nowVersion == '') {
			return false;
		}
		//第二份参数 是 数组的最大长度
		var OldVersionA = OldVersion.split(".", 4);
		var nowVersionA = nowVersion.split(".", 4);
		for (var i = 0; i < OldVersionA.length && i < nowVersionA.length; i++) {
			var strOld = OldVersionA[i];
			var numOld = parseInt(strOld);
			var strNow = nowVersionA[i];
			var numNow = parseInt(strNow);
			//小版本到高版本
			if (numNow > numOld /*||strNow.length>strOld.length*/ ) {
				return true;
			} else if (numNow < numOld) {
				return false;
			}
		}
		//如果是版本  如 1.6 - 1.6.1
		if (nowVersionA.length > OldVersionA.length && 0 == nowVersion.indexOf(OldVersion)) {
			return true;
		}
	};
	/**
	 * @constructor 创建通知栏进度条构造函数
	 */
	function NotificationCustom() {
		if (plus.os.name != 'Android') {
			return;
		}
		//当前版本号
		var SystemVersion = plus.os.version;
		var Context = plus.android.importClass("android.content.Context");
		var main = plus.android.runtimeMainActivity();
		var NotificationManager = plus.android.importClass("android.app.NotificationManager");
		var nm = main.getSystemService(Context.NOTIFICATION_SERVICE)
		// Notification build 要android api16以上才能使用(4.1.2以上)
		var Notification = null;
		if (compareVersion('4.1.1', SystemVersion) == true) {
			Notification = plus.android.importClass("android.app.Notification");
		} else {
			Notification = plus.android.importClass("android.support.v4.app.NotificationCompat");
		}
		if (Notification) {
			// this.notifyManager = nm;
			// this.mNotificationBuild = new Notification.Builder(main);

			var Build = plus.android.importClass("android.os.Build");
			if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { //android8.0及以上需设置通知渠道才能显示通知
				//创建通知渠道
				var name = "渠道名称1";
				var description = "渠道描述1";
				var channelId = "channelId1"; //渠道id     
				// var importance = NotificationManager.IMPORTANCE_DEFAULT;//重要性级别
				// var importance = NotificationManager.IMPORTANCE_HIGH; //重要性级别
				var importance = NotificationManager.IMPORTANCE_LOW; //重要性级别
				var NotificationChannel = plus.android.importClass("android.app.NotificationChannel");
				var mChannel = new NotificationChannel(channelId, name, importance);
				// var mChannel = new NotificationChannel("channelId1", "渠道名称1", importance);
				mChannel.setDescription(description); //渠道描述
				mChannel.setDescription("渠道描述1"); //渠道描述
				mChannel.enableLights(true); //是否显示通知指示灯
				mChannel.enableVibration(true); //是否振动
				nm.createNotificationChannel(mChannel); //创建通知渠道

				this.notifyManager = nm;
				this.mNotificationBuild = new Notification.Builder(main, channelId);
				// this.mNotificationBuild = new Notification.Builder(main,"channelId1");
			} else {
				this.notifyManager = nm;
				this.mNotificationBuild = new Notification.Builder(main);
			}

			/*
			mBuilder.setContentTitle("测试标题")//设置通知栏标题
			        .setContentText("测试内容") //设置通知栏显示内容
			        .setContentIntent(getDefalutIntent(Notification.FLAG_AUTO_CANCEL)) //设置通知栏点击意图
			        //  .setNumber(number) //设置通知集合的数量
			        .setTicker("测试通知来啦") //通知首次出现在通知栏，带上升动画效果的
			        .setWhen(System.currentTimeMillis())//通知产生的时间，会在通知信息里显示，一般是系统获取到的时间
			        .setPriority(Notification.PRIORITY_DEFAULT) //设置该通知优先级
			        //  .setAutoCancel(true)//设置这个标志当用户单击面板就可以让通知将自动取消
			        .setOngoing(false)//ture，ַ设置他为一个正在进行的通知。他们通常是用来表示一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接)
			        .setDefaults(Notification.DEFAULT_VIBRATE)//向通知添加声音、闪灯和振动效果的最简单、最一致的方式是使用当前的用户默认设置，使用defaults属性，可以组合
			        //Notification.DEFAULT_ALL  Notification.DEFAULT_SOUND 添加声音 // requires VIBRATE permission
			        .setSmallIcon(R.drawable.ic_launcher);//设置通知小ICON
			*/
			//设为true代表常驻状态栏
			this.mNotificationBuild.setOngoing(false);
			this.mNotificationBuild.setContentTitle(defaultTitle);
			this.mNotificationBuild.setContentText(defaultContent);
			this.mNotificationBuild.setTicker(defaultTicker);
			//默认的push图标
			// this.mNotificationBuild.setSmallIcon(17301620);//设置小图标
			//https://www.cnblogs.com/penghuster/p/4909930.html
			var R = plus.android.importClass("android.R");
			this.mNotificationBuild.setSmallIcon(R.drawable.stat_sys_download);
			//设置默认声音
			// console.log('默认:'+plus.android.importClass("android.app.Notification").DEFAULT_SOUND);
			this.mNotificationBuild.setDefaults(plus.android.importClass("android.app.Notification").DEFAULT_SOUND);
			//this.mNotificationBuild.setNumber(defaultNumber)
		}
	};
	/**
	 * @description 给android通知栏发送通知
	 * @param {String} title 标题
	 * @param {String} content  内容
	 * @param {String} tickerTips  提示
	 * @param {Number} notifyId id,默认为1000
	 */
	NotificationCustom.prototype.setNotification = function(title, content, tickerTips, notifyId) {
		if (this.mNotificationBuild == null ||
			this.notifyManager == null) {
			return;
		}
		notifyId = (typeof(notifyId) == 'number') ? notifyId : defaultNotifyId;
		title = title || defaultTitle;
		content = content || defaultContent;
		tickerTips = tickerTips || defaultTicker;
		this.mNotificationBuild.setContentTitle(title);
		this.mNotificationBuild.setContentText(content);
		this.mNotificationBuild.setTicker(tickerTips);
		//默认有声音
		this.mNotificationBuild.setDefaults(plus.android.importClass("android.app.Notification").DEFAULT_SOUND);
		this.notifyManager.notify(notifyId, this.mNotificationBuild.build());
	};
	/**
	 * @description 设置进度条
	 * @param {Number} progress
	 * @param {String} title 标题
	 * @param {String} content  内容
	 * @param {String} tickerTips  提示
	 * @param {Number} notifyId id,默认为1000
	 */
	NotificationCustom.prototype.setProgress = function(progress, title, content, tickerTips, notifyId) {
		if (this.mNotificationBuild == null ||
			this.notifyManager == null) {
			return;
		}
		notifyId = (typeof(notifyId) == 'number') ? notifyId : defaultNotifyId;
		title = title || 'APP更新包';
		content = content || '正在下载...【' + progress + '%】';
		tickerTips = tickerTips || '进度提示';
		this.mNotificationBuild.setContentTitle(title);
		this.mNotificationBuild.setContentText(content);
		this.mNotificationBuild.setTicker(tickerTips);
		/*
		如果为确定的进度条：调用setProgress(max, progress, false)来设置通知，在更新进度的时候在此发起通知更新progress，并且在下载完成后要移除进度条，通过调用setProgress(0, 0, false)既可。
		如果为不确定（持续活动）的进度条，这是在处理进度无法准确获知时显示活动正在持续，所以调用setProgress(0, 0, true) ，操作结束时，调用setProgress(0, 0, false)并更新通知以移除指示条
		*/
		//进度条显示时,默认无声音
		this.mNotificationBuild.setDefaults(0);
		this.mNotificationBuild.setProgress(100, progress, false);
		this.notifyManager.notify(notifyId, this.mNotificationBuild.build());
	};
	/**
	 * @description 完成进度条
	 * @param {String} title 标题
	 * @param {String} content  内容
	 * @param {String} tickerTips  提示
	 * @param {Number} notifyId id,默认为1000
	 */
	NotificationCustom.prototype.compProgressNotification = function(title, content, tickerTips, notifyId) {
		if (this.mNotificationBuild == null ||
			this.notifyManager == null) {
			return;
		}
		notifyId = (typeof(notifyId) == 'number') ? notifyId : defaultNotifyId;
		title = title || 'APP更新包';
		content = content || '下载完毕!';
		tickerTips = tickerTips || '进度提示';

		var R = plus.android.importClass("android.R");
		this.mNotificationBuild.setSmallIcon(R.drawable.stat_sys_download_done);

		this.mNotificationBuild.setContentTitle(title);
		this.mNotificationBuild.setContentText(content);
		this.mNotificationBuild.setTicker(tickerTips);
		this.mNotificationBuild.setProgress(0, 0, false); //移除进度条
		//默认有声音
		// this.mNotificationBuild.setDefaults(plus.android.importClass("android.app.Notification").DEFAULT_SOUND);
		this.mNotificationBuild.setOnlyAlertOnce(true)
		this.notifyManager.notify(notifyId, this.mNotificationBuild.build());
	};
	/**
	 * @description 清除通知栏信息
	 * @param {Number} notifyId id,默认为1000
	 */
	NotificationCustom.prototype.clearNotification = function(notifyId) {
		notifyId = (typeof(notifyId) == 'number') ? notifyId : defaultNotifyId;
		if (this.notifyManager) {
			this.notifyManager.cancel(notifyId);
		}
	};
	/**
	 * @description 清除所有通知栏信息
	 */
	NotificationCustom.prototype.clearAllNotification = function() {
		if (this.notifyManager) {
			this.notifyManager.cancelAll();
		}
	};
	return new NotificationCustom();
}
